<!DOCTYPE html> 
<html lang="ja"> 
    <head> 
        <meta charset="utf-8"> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>TM Lib Test | TM Lib</title>
        
        <style>
            body { font-family: "Meiryo", "メイリオ", "ヒラギノ角ゴ Pro W3", sans-serif; }
            
            #content {
                display: -webkit-box;
                display: -moz-box;
                display: -o-box;
                display: box;
            }
            
            #content>* {
                padding: 10px 20px;
                width: 50%;
                -webkit-box-sizing: border-box;
                -moz-box-sizing: border-box;
                -o-box-sizing: border-box;
                box-sizing: border-box;
            }
        </style>
        
        <script type="text/javascript" src="./../src/tmlib.js"></script>
        <script id="test-script">
            
            /*
             * TM Lib Test
             */
            TM.main(function()
            {
                // コンソール
                var c = TM.DebugConsole("#console");
                //var c = console; // コンソールの方に出力
                
                c.group("【field test in TM】");
                c.log("version      : ", TM.version);       // バージョン
                c.log("libRoot      : ", TM.libRoot);       // tmlib.js が置いてある場所
                c.log("browser      : ", TM.browser);       // 使用ブラウザ
                c.log("venderPrefix : ", TM.venderPrefix);  // ベンダープレフィックス
                c.groupEnd();
                
                
                
                
                c.group("【method test in TM】")
                c.groupEnd();
                
                
                // 
                // 
                // method test in String
                c.group("【method test in String】")
                
                c.log("format               : ", "hsl({0}, {1}%, {2}%)".format(240, 50, 60));   // フォーマット. 便利ですよ～.
                c.log("trim                 : ", "   aaaaaaaaaaa     ".trim()); // トリミング
                c.log("capitalize           : ", "i am a pen.".capitalize());   // 区切りを大文字
                c.log("capitalizeFirstLetter: ", "i am a pen.".capitalizeFirstLetter());    // 先頭のみ大文字化
                c.log("toDash               : ", "BackgroundColor".toDash());   // ダッシュ文字に変換
                c.log("toCRC32              : ", "hoge".toCRC32());             // crc32 変換
                c.log("padding              : ", "1234".padding(10, '0'));      // 文字詰め.
                c.log("paddingLeft          : ", "1234".paddingLeft(10, '0'));  // 文字詰め.
                c.log("paddingRight         : ", "1234".paddingRight(10, '0')); // 文字詰め.
                
                c.groupEnd();
                
                
                // 
                // 
                // method test in Number
                c.group("【method test in Number】")
                
                c.log("round        : ", (42.1947).round(3));   // 四捨五入
                c.log("ceil         : ", (42.1947).ceil(3));    // 切り上げ
                c.log("floor        : ", (42.1947).floor(3));   // 切り捨て
                c.log("toInt        : ", (42.195).toInt());     // 整数に変換
                c.log("toUnsigned   : ", (0xf0f0f0ff & 0xff000000).toUnsigned());   // u32 に変換. s32 のままだと先頭ビットが立っているので負数になる
                c.log("toHex        : ", (100).toHex());        // 16進数に変換
                c.log("toBin        : ", (100).toBin());        // 16進数に変換
                c.log("padding      : ", (55).padding(10, '0'));// 文字詰め. 返値は文字列.
                
                c.groupEnd();
                
                
                
                // 
                // 
                // 
                c.group("【method test in Array】")
                
                var a = [1, 2, 4, 8, 16, 32];
                var b = [8, 8, 2, 8, 2, 8, 8];
                var t = [1, 2, 3, 4, 5, 6, 7];
                
                c.log("erase(4)     : ", a.erase(4));   // 削除
                c.log("eraseAll(8)  : ", b.eraseAll(8));// 一致する要素を全て削除
                c.log("eraseIf      : ", t.eraseIf(function(elm) { return (elm%2)==0; }));// 条件に一致する要素を全て削除
                c.log("random()     : ", a.random());   // ランダムに取得
                c.log("random(2)    : ", a.random());   // ランダムに取得
                c.log("random(1, 2) : ", a.random());   // ランダムに取得
                c.log("clone        : ", a.clone());    // クローン
                c.log("clear        : ", a.clear());    // クリアする
                
                c.groupEnd();
                
                
                // 
                // 
                // 
                c.group("【create(define) class】");
                
                // SuperHoge というクラスを作成
                var SuperHoge = TM.createClass({
                    // コンストラクタ. init という名前である必要があります.
                    init: function(name) {
                        this.name = name;
                        
                        c.log("---- create SuperHoge ----");
                    },
                    
                    test: function() {
                        c.log("My name is {name}.".format(this));
                    }
                });
                // SuperHoge を生成(createClass で定義すると new はいらないよん♪)
                var hoge = SuperHoge("phi");
                hoge.test();
                
                
                
                
                // SuperHoge を継承して SubHoge クラスを作成
                var SubHoge = TM.createClass({
                    
                    // 継承元となるクラスを指定. superClass という名前である必要があります.
                    superClass: SuperHoge,
                    
                    // コンストラクタ
                    init: function(name, bloodType) {
                        // 親のコンストラクタを呼ぶ
                        this.superInit(SuperHoge, name);
                        this.bloodType = bloodType;
                        
                        c.log("---- create SubHoge ----");
                    },
                    
                    test: function() {
                        c.log("My name is {name}.".format(this));
                        c.log("My blood type is {bloodType}.".format(this));
                    }
                });
                // SubHoge を生成(createClass で定義すると new はいらないよん♪)
                hoge = SubHoge("phi");
                hoge.test();
                
                
                
                c.groupEnd();
                
            });
            
        </script>
        
        <script>
            TM.addNamespace("prettify", "./../plugins/prettify");
            TM.loadPrettify();
            
            TM.main(function(){
                TM.$id("code").innerText = TM.$id("test-script").innerText;
                prettyPrint();
            });
        </script>
    </head>
    
    <body>
         
        <h1>TM Lib Test | TM Lib</h1>
        
        <div id="content">
            <section>
                <h2>Console</h2>
                <pre id="console" class="prettyprint"></pre>
            </section>
            <section>
                <h2>Code</h2>
                <pre id="code" class="prettyprint"></pre>
            </section>
        </div>
        
        
    </body>
</html>
